home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1035 / 1035.xpi / chrome / 1clickweather.jar / content / 1clickweather / js / data / panel.js < prev    next >
Text File  |  2010-01-04  |  14KB  |  457 lines

  1. // ∩┐╜ 2005 The Weather Channel Interactive, Inc.  All Rights Reserved.
  2.  
  3. jsInclude("chrome://1clickweather/content/js/config/loadconfig.js");
  4.  
  5. var oPanel = Array();
  6. var mytm = false;
  7.  
  8. // ok, we first make a stub object that we can inherit from
  9. function oPanelStub(){
  10.    this.id = null;
  11.    this.Panel = null;
  12.    this.Box = null;
  13.    this.CurrentLocation = null;
  14.    this.dataSrc = null;
  15.    this.initTime = null;
  16.    this.lastChangeTime = null;
  17.    this.Url = null;
  18.  
  19.    this.Data = {};
  20.    var initFlag = false;
  21.  
  22.  
  23.    //DumperTagProperties["OPTION"] = ['text','value','defaultSelected'];
  24.  
  25.    this.Dump = function(asText){
  26.       if(asText){
  27.          return(Dumper("PANEL: " + this.getID() + "\n" + this.getState()));
  28.       }else{
  29.          DumperAlert("PANEL: " + this.getID() + "\n" + this.getState());
  30.       }
  31.    }
  32.  
  33.    this.init = function(id){
  34.       try{
  35.       this.id = id;
  36.       this.context = ToolbarContainers[this.id].getID() + ".Tooltip";
  37.  
  38.       if(this.id && !initFlag){
  39.          this.Panel = document.createElement("statusbarpanel");
  40.          this.Panel.setAttribute("id", 'statusbar-container.' + this.id);
  41.  
  42.          this.Box = document.createElement("hbox");
  43.          this.Box.setAttribute("id", this.id + ".box");
  44.          this.Panel.appendChild(this.Box);
  45.  
  46.          document.getElementById(GlobalToolbarLocation).appendChild(this.Panel);
  47.          this.CurrentLocation = GlobalToolbarLocation;         
  48.  
  49.          this.Make();
  50.          initFlag = true;
  51.          this.initTime = now();
  52.       }
  53.       }catch(e){
  54.          debug("error in panel init: " + e);
  55.       }
  56.    }
  57.  
  58.    this.Delete = function(){
  59.       document.getElementById(this.CurrentLocation).removeChild(document.getElementById(ToolbarContainers[this.id].getID()));
  60.       initFlag = false;
  61.    }
  62.  
  63.    this.moveToolbar = function(){
  64.       try{
  65.          document.getElementById(this.CurrentLocation).removeChild(document.getElementById(ToolbarContainers[this.id].getID()));
  66.          document.getElementById(GlobalToolbarLocation).appendChild(this.Panel);
  67.          
  68.          this.CurrentLocation = GlobalToolbarLocation;
  69.          this.lastChangeTime = now();
  70.       }catch(e){
  71.          debug("error moving panel: " + this.id + " " + e);
  72.       }
  73.    }
  74.  
  75.    this.getID = function(){
  76.       return('statusbar-container.' + this.id);
  77.    }
  78.  
  79.    // Hide/Show hide or show the whole panel
  80.    this.Hide = function(){
  81.       this.Panel.setAttribute("collapsed", true);
  82.       this.lastChangeTime = now();
  83.    }
  84.  
  85.    this.Show = function(){
  86.       this.Panel.setAttribute("collapsed", false);
  87.       this.disableTooltip();
  88.       this.lastChangeTime = now();
  89.       
  90.       //**-- We show the location, because it may be hidden by the user!
  91.          if(document.getElementById(GlobalToolbarLocation).hidden)
  92.             document.getElementById(GlobalToolbarLocation).hidden = false;
  93.    }
  94.  
  95.    this.drawFromHbox = function(newHbox){
  96.       newHbox.setAttribute("class", "panelStyle");
  97.       newHbox.setAttribute("id", this.getID() + ".box");
  98.       try{
  99.          document.getElementById('statusbar-container.' + this.id).removeChild(this.Box);
  100.          this.Box = newHbox;
  101.       }
  102.       catch(e){
  103.          GlobalError.Custom("draw: " + e.message);
  104.       }
  105.       if(this.getID() != "statusbar-container.SWA"){
  106.          this.enableTooltip();
  107.       }else{
  108.          this.disableTooltip();
  109.       }
  110.       document.getElementById('statusbar-container.' + this.id).appendChild(newHbox);
  111.       this.lastChangeTime = now();
  112.    }
  113.  
  114.    this.setDataSource = function(src){
  115.       // make sure there is an existing data source object to register with
  116.       if(src && (typeof(DataContainers[src]) != "undefined")){
  117.          debug("setDatasource: " + src);         
  118.          DataContainers[src].Register(this.id);
  119.          this.dataSrc = src;
  120.       }
  121.    }
  122.  
  123.    // Hide/ShowIcon are meant to hide or show the individual icons in the options panel
  124.    this.HideIcon = function(iconKey){
  125.       this.Data[iconKey].setAttribute("hidden", "true");
  126.       this.lastChangeTime = now();
  127.    }
  128.  
  129.    this.ShowIcon = function(iconKey){
  130.       this.Reregister();
  131.       this.Data[iconKey].setAttribute("hidden", "false");
  132.       this.lastChangeTime = now();
  133.    }
  134.  
  135.    this.getScreenXY = function(){
  136.       return(Array(this.Box.boxObject.screenX, this.Box.boxObject.screenY));
  137.    }
  138.  
  139.    this.enableTooltip = function(){
  140.       this.Box.setAttribute("tooltip", this.getID() + ".Tooltip");
  141.       this.lastChangeTime = now();
  142.    }
  143.  
  144.    this.disableTooltip = function(){
  145.       this.Box.setAttribute("tooltip", null);
  146.       try{
  147.          var parent = document.getElementById(this.getID() + ".Tooltip").parentNode;
  148.          parent.removeChild(document.getElementById(this.getID() + ".Tooltip"));
  149.       }catch(e){
  150.          debug("error del tooltip: " + this.getID() + " " + e);
  151.       }
  152.       this.lastChangeTime = now();
  153.    }
  154.  
  155.    this.getState = function(){
  156.       var str = '';
  157.  
  158.       var xy = this.getScreenXY();
  159.       str += 'location: ' + this.CurrentLocation + '\n';
  160.       str += 'collapsed: ' + this.Panel.getAttribute("collapsed") + '\n';
  161.       str += 'pos: x: ' + xy[0] + ' y: ' + xy[1] + '\n';
  162.       str += 'datasrc: ' + this.dataSrc + '\n';
  163.       str += 'inittime: ' + this.initTime + '\n';
  164.       str += 'changetime: ' + this.lastChangeTime + '\n';
  165.       return(str);
  166.    }
  167.  
  168.    this.setLink = function(url){
  169.       this.Url = url;
  170.    }
  171.  
  172.    // if we are just hitting a link directly off of the options bar...
  173.    this.Link = function(linkIndex){
  174.       var str = "";
  175.       try{
  176.          switch(linkIndex){
  177.             case 'radar':
  178.                str = GlobalAppConfig.getMapByID(GlobalUserConfig.getAllProfiles().getDefaultProfile().getRadar().getID()).getURL();
  179.                break;
  180.             case 'satellite':
  181.                str = GlobalAppConfig.getMapByID(GlobalUserConfig.getAllProfiles().getDefaultProfile().getSatelite().getID()).getURL();
  182.                break;
  183.             case 'video':
  184.                str = GlobalAppConfig.getVideoByID(GlobalUserConfig.getAllProfiles().getDefaultProfile().getVideo().getID()).getURL();
  185.                break;
  186.             case 'swa':
  187.                str = this.Url;
  188.                break;
  189.                case 'hourbyhour':
  190.                    var locationId = GlobalUserConfig.getAllProfiles().getDefaultProfile().getSetup().getLocation().getLocID();
  191.                    str = "http://1cwffweb.weather.com/weather/hourbyhour/"+ locationId +"?cm_ven=1CW&cm_cat=FFv1.1.9&cm_pla=wx.com-bar&cm_ite=wx-hbh&par=1CWFFv1.1.9&site=wx.com-bar";
  192.                    break;
  193.                case 'tendayfcst':
  194.                    var locationId = GlobalUserConfig.getAllProfiles().getDefaultProfile().getSetup().getLocation().getLocID();
  195.                    str = "http://1cwffweb.weather.com/weather/tenday/"+  locationId +"?cm_ven=1CW&cm_cat=FFv1.1.9&cm_pla=wx.com-bar&cm_ite=wx-tenday&par=1CWFFv1.1.9&site=wx.com-bar";
  196.                    break;
  197.          }
  198. //         alert("link: " + str);
  199.          openLinkInNewTab(str);
  200.  
  201.       }catch(e){
  202.          debug("error in link: " + e);
  203.       }
  204.    }
  205. }
  206.  
  207. // oPanel.Alert does the alert panel in the status bar
  208. oPanel.SWA = function(){ };
  209. oPanel.SWA.prototype = new oPanelStub;
  210.  
  211. oPanel.SWA.prototype.Make = function(){
  212.    this.Hide();
  213.    var l = new oXUL.Label(this.Box, "swa");
  214.    l.Align("center");
  215.    l.Make();
  216.  
  217.    this.setDataSource('SWA');
  218. }
  219.  
  220. // now, we make a new object based on the stub with extra functions
  221. // The oPanel.Options handles the options icons in the status bar
  222. oPanel.Options = function(){ };
  223. oPanel.Options.prototype = new oPanelStub;
  224.  
  225.  
  226. oPanel.Options.prototype.Reregister = function() {
  227.         //this.Data['lifestyle'].addEventListener('click',lifestyleClick,false);
  228.         this.Data['radar'].addEventListener('click',radarClick,false);
  229.         this.Data['satellite'].addEventListener('click',satelliteClick,false);
  230.         this.Data['video'].addEventListener('click',videoClick,false);
  231.         this.Data['hourbyhour'].addEventListener('click',clockClick,false);
  232.         this.Data['tendayfcst'].addEventListener('click',tendayfcstClick,false);
  233. }
  234.  
  235. oPanel.Options.prototype.Make = function(){
  236.    
  237.     /*    
  238.    var lifestyle = document.createElement("hbox");
  239.    lifestyle.setAttribute("class", "panelStyle");
  240.    lifestyle.setAttribute("hidden", "true");
  241.    XULSimple.Spacer(lifestyle, 5);
  242.    var i = new oXUL.iconByID(lifestyle, "toolbar_quick");
  243.    lifestyle.addEventListener('click',lifestyleClick,false);
  244.    //i.onClick("openXUL('lifestyle.xul');");
  245.    i.setAttribute("tooltip", "quickLaunchTooltip");
  246.    i.Make();
  247.    this.Box.appendChild(lifestyle);
  248.    
  249.    this.Data['lifestyle'] = lifestyle;
  250.     */
  251.     
  252.    var radar = document.createElement("hbox");
  253.    radar.setAttribute("hidden", "true");
  254.    radar.setAttribute("class", "panelStyle");
  255.    XULSimple.Spacer(radar, 5);
  256.    var i = new oXUL.iconByID(radar, "toolbar_radar");
  257.    radar.addEventListener('click',radarClick,false);
  258.    
  259.    
  260.    //i.onClick("ToolbarContainers['Options'].Link('radar');");
  261.    i.setAttribute("tooltip", "radarTooltip");
  262.    i.Make();
  263.    this.Box.appendChild(radar);
  264.    this.Data['radar'] = radar;
  265.  
  266.    var satellite = document.createElement("hbox");
  267.    satellite.setAttribute("hidden", "true");
  268.    satellite.setAttribute("class", "panelStyle");
  269.    XULSimple.Spacer(satellite, 5);
  270.    var i = new oXUL.iconByID(satellite, "toolbar_satellite");
  271.    satellite.addEventListener('click',satelliteClick,false);
  272.    //i.onClick("ToolbarContainers['Options'].Link('satellite');");
  273.    i.setAttribute("tooltip", "sateliteTooltip");
  274.    i.Make();
  275.    this.Box.appendChild(satellite);
  276.    this.Data['satellite'] = satellite;
  277.  
  278.    var video = document.createElement("hbox");
  279.    video.setAttribute("hidden", "true");
  280.    video.setAttribute("class", "panelStyle");
  281.    XULSimple.Spacer(video, 5);
  282.    var i = new oXUL.iconByID(video, "toolbar_video");
  283.    video.addEventListener('click',videoClick,false);
  284.    //i.onClick("ToolbarContainers['Options'].Link('video');");
  285.    i.setAttribute("tooltip", "videoTooltip");
  286.    i.Make();
  287.    this.Box.appendChild(video);
  288.    this.Data['video'] = video;
  289.    
  290.    // ******************************************
  291.    // clock icon
  292.    // ******************************************
  293.    var hourbyhour = document.createElement("hbox");
  294.    hourbyhour.setAttribute("class", "panelStyle");
  295.    hourbyhour.setAttribute("hidden", "true");
  296.    XULSimple.Spacer(hourbyhour, 5);
  297.    var i = new oXUL.iconByID(hourbyhour, "clock");
  298.    hourbyhour.addEventListener('click',clockClick,false);//todo change
  299.    i.setAttribute("tooltip", "hourbyhourTooltip");
  300.    i.Make();
  301.    this.Box.appendChild(hourbyhour);
  302.    this.Data['hourbyhour'] = hourbyhour;
  303.    
  304.    // ******************************************
  305.    // 10 day forecast icon
  306.    // ******************************************
  307.    var tendayfcst = document.createElement("hbox");
  308.    tendayfcst.setAttribute("class", "panelStyle");
  309.    tendayfcst.setAttribute("hidden", "true");
  310.    XULSimple.Spacer(tendayfcst, 5);
  311.    var i = new oXUL.iconByID(tendayfcst, "tendayfcst");
  312.    tendayfcst.addEventListener('click',tendayfcstClick,false);//todo change
  313.    i.setAttribute("tooltip", "tendayfcstTooltip");
  314.    i.Make();
  315.    this.Box.appendChild(tendayfcst);
  316.    this.Data['tendayfcst'] = tendayfcst;
  317.   
  318. }
  319.  
  320.  
  321. // oPanel.CurrentCond does the alert panel in the status bar
  322. oPanel.CurrentCond = function(){ };
  323. oPanel.CurrentCond.prototype = new oPanelStub;
  324.  
  325. oPanel.CurrentCond.prototype.Make = function(){
  326.    this.Hide();
  327.    var l = new oXUL.Label(this.Box, "cc");
  328.    l.Align("center");
  329.    l.Tooltip(this.id);
  330.    l.Make();
  331.  
  332.    this.setDataSource('Obs');
  333. }
  334.  
  335. // oPanel.CurrentCond does the alert panel in the status bar
  336. oPanel.Day0 = function(){ };
  337. oPanel.Day0.prototype = new oPanelStub;
  338.  
  339. oPanel.Day0.prototype.Make = function(){
  340.    this.Hide();
  341.    var l = new oXUL.Label(this.Box, "day0");
  342.    l.Align("center");
  343.    l.Tooltip(this.id);
  344.    l.Make();
  345.  
  346.    this.setDataSource('Fcst');
  347. }
  348.  
  349. // oPanel.CurrentCond does the alert panel in the status bar
  350. oPanel.Day1 = function(){ };
  351. oPanel.Day1.prototype = new oPanelStub;
  352.  
  353. oPanel.Day1.prototype.Make = function(){
  354.    this.Hide();
  355.    var l = new oXUL.Label(this.Box, "day1");
  356.    l.Align("center");
  357.    l.Tooltip(this.id);
  358.    l.Make();
  359.  
  360.    this.setDataSource('Fcst');
  361. }
  362.  
  363. // oPanel.CurrentCond does the alert panel in the status bar
  364. oPanel.Day2 = function(){ };
  365. oPanel.Day2.prototype = new oPanelStub;
  366.  
  367. oPanel.Day2.prototype.Make = function(){
  368.    this.Hide();
  369.    var l = new oXUL.Label(this.Box, "day2");
  370.    l.Align("center");
  371.    l.Tooltip(this.id);
  372.    l.Make();
  373.  
  374.    this.setDataSource('Fcst');
  375. }
  376.  
  377. // oPanel.CurrentCond does the alert panel in the status bar
  378. oPanel.Day3 = function(){ };
  379. oPanel.Day3.prototype = new oPanelStub;
  380.  
  381. oPanel.Day3.prototype.Make = function(){
  382.    this.Hide();
  383.    var l = new oXUL.Label(this.Box, "day3");
  384.    l.Align("center");
  385.    l.Tooltip(this.id);
  386.    l.Make();
  387.  
  388.    this.setDataSource('Fcst');
  389. }
  390.  
  391. // oPanel.CurrentCond does the alert panel in the status bar
  392. oPanel.Day4 = function(){ };
  393. oPanel.Day4.prototype = new oPanelStub;
  394.  
  395. oPanel.Day4.prototype.Make = function(){
  396.    this.Hide();
  397.    var l = new oXUL.Label(this.Box, "day4");
  398.    l.Align("center");
  399.    l.Tooltip(this.id);
  400.    l.Make();
  401.  
  402.    this.setDataSource('Fcst');
  403. }
  404.  
  405. function lifestyleClick(event){
  406.     if(event.button==0 || event.button==1) {
  407.         openXUL('lifestyle.xul');
  408.     } else {
  409.         callSetup();
  410.     }
  411. }
  412.  
  413. function radarClick(event){
  414.     if(event.button==0 || event.button==1) {
  415.         ToolbarContainers['Options'].Link('radar');
  416.     } else {
  417.         callSetup();
  418.     }
  419. }
  420.  
  421. function satelliteClick(event){
  422.     if(event.button==0 || event.button==1) {
  423.         ToolbarContainers['Options'].Link('satellite');
  424.     } else {
  425.         callSetup();
  426.     }
  427. }
  428.  
  429. function videoClick(event){
  430.     if(event.button==0 || event.button==1) {
  431.         ToolbarContainers['Options'].Link('video');
  432.     } else {
  433.         callSetup();
  434.     }
  435. }
  436. // clock icon click event handler
  437. function clockClick(event){
  438.     if(event.button==0 || event.button==1){
  439.         ToolbarContainers['Options'].Link('hourbyhour');
  440.     }
  441.     else{
  442.         callSetup();
  443.     }
  444. }
  445.  
  446. // 10 day forecast icon click event handler
  447. function tendayfcstClick(event){
  448.     if(event.button==0 || event.button==1){
  449.         ToolbarContainers['Options'].Link('tendayfcst');
  450.     }
  451.     else{
  452.         callSetup();
  453.     }
  454. }
  455.  
  456.  
  457.